package com.kpmg.datalake.common.service;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.kpmg.datalake.common.model.RbacFunction;
import com.kpmg.datalake.common.vo.RbacFunctionVo;
import com.kpmg.datalake.common.vo.RbacRoleVo;
import com.kpmg.datalake.common.vo.RbacUserVo;
import com.kpmg.datalake.common.vo.RbacVo;
import com.kpmg.datalake.common.vo.ServerResponse;
import com.kpmg.datalake.db.model.Project;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 权限管理-功能管理
 *
 * @author eguo5
 */
public interface RbacFunctionService {

	/**
	 * 对接AD系统信息
	 * @return
	 */
	ServerResponse getADSystemInfo(RbacVo rbacVo);
	
    /**
     * 获取权限管理功能树
     *
     * @param userId userId
     * @return ServerResponse
     */
    ServerResponse<JSONObject> rbacFunctionTreeJsonObject(RbacVo rbacVo);

    /**
     * 获取权限管理功能树(vba)
     *
     * @return ServerResponse
     */
    ServerResponse<ArrayList<RbacFunction>> vbaTreeJsonObject();

    /**
     * 获取vba历史报表信息
     *
     * @param userId    userId
     * @param projectId projectId
     * @param filter    filter
     * @return List
     */
    List<Map<String, Object>> getUserRptTemplates(String userId, String projectId, String filter);

    /**
     * 获取用户所有功能权限
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<JSONObject> getRbacFunctions(RbacVo rbacVo);

    /**
     * 获取DATA用户列表
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<PageInfo<RbacUserVo>> getUserBusiness(RbacVo rbacVo);

    /**
     * 获取数据权限列表
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<JSONObject> getProjectList(RbacVo rbacVo);

    /**
     * 获取DATA用户权限下角色列表
     *
     * @return ServerResponse
     */
    ServerResponse<JSONObject> getRbacRoleList();

    /**
     * 添加用户角色关联
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<String> addUserRole(RbacVo rbacVo);


    /**
     * 新建DATA用户
     *
     * @param rbacVo
     * @return ServerResponse
     */
    ServerResponse<JSONObject> addUserForDATA(RbacVo rbacVo);

    /**
     * 根据projectid和its_code进行权限同步
     * @return
     */
    ServerResponse<String> rbacSynchronization();

    /**
     * 删除DATA用户
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<String> deleteUserForDATA(RbacVo rbacVo);

    /**
     * 修改密码
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<String> changePassword(RbacVo rbacVo);
    
    /**
     * 获取BA用户列表
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<PageInfo<RbacUserVo>> getUserForBA(RbacVo rbacVo);

    /**
     * 新建DATA用户
     *
     * @param rbacUserVo rbacUserVo
     * @return ServerResponse
     */
    ServerResponse<JSONObject> addUserForBA(RbacVo rbacVo);
    
    /**
     * 删除BA用户
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<String> deleteUserForBA(RbacVo rbacVo);

    /**
     * 获取所有project
     *
     * @return ServerResponse
     */
    ServerResponse<JSONObject> getAllProject();

    /**
     * 新建角色
     *
     * @param rbacRoleVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<String> addRole(RbacRoleVo rbacRoleVo);

    /**
     * 新建功能
     *
     * @param rbacFunctionVo rbacFunctionVo
     * @return ServerResponse
     */
    ServerResponse<String> addFunction(RbacFunctionVo rbacFunctionVo);

    /**
     * 用户状态更新(1:启用;0:禁用)
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<String> updateUserStatus(RbacVo rbacVo);


    /**
     * 角色状态更新(1:启用;0:禁用)
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<String> updateRoleStatus(RbacVo rbacVo);

    /**
     * 删除角色
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<String> deleteRoleStatus(RbacVo rbacVo);

    /**
     * 用户角色权限修改
     *
     * @param rbacVo rbacVo
     * @return ServerResponse
     */
    ServerResponse<String> userAddRole(RbacVo rbacVo);

  /**
   * 同步项目用户信息权限
   *
   * @param project 项目信息
   * @return 执行结果
   */
  ServerResponse<String> syncProjectUserPermissions(Project project);

    /**
     * 根据用户id获取用户所拥有的项目权限id列表
     * @param userId 用户id
     * @return
     */
  List<String> queryProjectPrivilegeIdList(String userId);

}
